// import format from 'date-fns/format';
// import qs from 'qs';
// import QR from '../lib/wxqrcode';
// import LoginException from '../model/LoginException';
import config from '@/js/config';

// const ORDER_STATUS_MAP = {
// 	0: '待支付',
// 	1: '待发货',
// 	2: '待收货',
// 	3: '已完成',
// 	4: '待退货',
// 	5: '已退货',
// 	6: '待退款',
// 	7: '已退款',
// 	8: '交易关闭',
// 	9: '待评价',
// 	10: '已支付',
// };

// const ORDER_STATUS_CLASS_MAP = {
// 	0: 'status-to-payed', // '待支付',
// 	1: 'status-to-delivered', // '待发货',
// 	2: 'status-to-received', // '待收货',
// 	3: 'status-finished', // '已完成',
// 	4: 'status-to-returned', // '待退货',
// 	5: 'status-returned', // '已退货',
// 	6: 'status-to-refunded', // '待退款',
// 	7: 'status-refunded', // '已退款',
// 	8: 'status-closed', // '交易关闭',
// 	9: 'status-to-evaluated', // '待评价',
// 	10: 'status-evaluated', // '已支付',
// };

export default {

	data() {
		return {
			_needUpdateParams: null,
			pageStatus: '',
		};
	},

	computed: {
		currentUser() {
			// return this.$store.state.currentUser;
			return '';
		},
	},

	onShow() {
		if (this._needUpdateParams) {
			this.onNeedUpdate(this._needUpdateParams);
			this._needUpdateParams = null;
		}
		this.onShow();
	},

	methods: {
		formatUrlWithParams(url, params) {
			return `${url}?${qs.stringify(params, { encode: false })}`;
		},
		/**
		 * uni 页面跳转修改，支持传入对象参数，保留当前页面，跳转到应用内的某个页面
		 * @param url uni 跳转的页面
		 * @param params 参数
		 */
		navigateTo(url, params = {}) {
			uni.navigateTo({
				url: this.formatUrlWithParams(url, params)
			});
		},

		/**
		 * uni 页面跳转修改，支持传入对象参数，关闭当前页面，跳转到应用内的某个页面
		 * @param url uni 跳转的页面
		 * @param params 参数
		 */
		redirectTo(url, params = {}) {
			uni.redirectTo({
				url: this.formatUrlWithParams(url, params)
			});
		},

		/**
		 * uni 页面跳转修改，支持传入对象参数，关闭当前页面，跳转到应用内的某个页面
		 * @param url uni 跳转的页面
		 * @param params 参数
		 */
		reLaunch(url, params = {}) {
			uni.reLaunch({
				url: this.formatUrlWithParams(url, params)
			});
		},

		/**
		 * 通知上一页刷新，修改上一（N）页的 _needUpdateParams
		 * @param params 修改上一页的 _needUpdateParams 为该参数
		 * @param prevPageLevel 当前页的前 n 页，默认 1
		 */
		notifyPrevPageUpdate(params, prevPageLevel = 1) {
			const pages = getCurrentPages();
			const page = pages[pages.length - 1 - prevPageLevel];
			if (page) {
				page.$vm._needUpdateParams = params || {};
			}
		},

		onShow() {},

		onNeedUpdate(params) {},

		/**
		 * 请求的错误处理
		 * @param error 错误对象或者字符串
		 * @param title 提示的标题
		 */
		showError(error, title = '提示') {
			return new Promise((resolve) => {
				uni.showModal({
					title,
					content: error ? error.message || error : '请检查网络是否连接',
					showCancel: false,
					success: () => {
						resolve();
					},
				});
			});
		},

		/**
		 * 时间格式化
		 * @param date 时间对象/时间戳
		 * @param dateFormat 格式
		 */
		formatDate(date, dateFormat = 'YYYY-MM-DD HH:mm:ss') {
			return format(date, dateFormat);
		},

		/**
		 * 订单状态格式化
		 * @param date 时间对象/时间戳
		 * @param dateFormat 格式
		 */
		formatOrderStatus(status) {
			return ORDER_STATUS_MAP[Number(status)] || '';
		},


		/**
		 * 返回订单状态对应的 css 类
		 * @param status
		 * @returns css 类
		 */
		formatOrderStatusClass(status) {
			return ORDER_STATUS_CLASS_MAP[Number(status)] || '';
		},

		/**
		 * 显示 toast
		 * @param message toast 信息
		 * @param duration 显示时长，默认 1.5s
		 */
		showToast(message, mask = true, duration = 1500) {
			return new Promise((resolve, reject) => {
				uni.showToast({
					icon: 'none',
					title: message,
					mask,
					duration,
				});
				setTimeout(() => {
					resolve();
				}, duration);
			});
		},
		// 存openID
		// saveOpenId(openId) {
		// 	uni.setStorageSync('openId', openId);
		// },
		// 获取桌号
		getDeName() {
			return uni.getStorageSync('deName');
		},
		// 获取桌子ID
		getDeskId() {
			return uni.getStorageSync('deskId');
		},
		// 获取桌子人数
		getDinersNumber() {
			return uni.getStorageSync('dinersNumber');
		},
		// 获取用户名字。
		getLoginName() {
			return uni.getStorageSync('loginUserName');
		},
		// saveCurrentUser(user) {
		// 	uni.setStorageSync('user', user);
		// },

		// getCurrentUser() {
		// 	return uni.getStorageSync('user');
		// },

		// getCurrentPagePath() {
		// 	const pages = getCurrentPages();
		// 	const currentPage = pages[pages.length - 1];
		// 	return `/${currentPage.route}`;
		// },

		/**
		 * 检查是否已登录
		 * @param isReLaunch 是否重新打开
		 * @param tabPage 是否不跳转，停留在当前页面
		 */
		checkHasLogin(isReLaunch = true, tabPage = false) {
			if (!this.getCurrentUserId()) {
				const pages = getCurrentPages();
				const currentPage = pages[pages.length - 1];
				const redirectPath = encodeURIComponent(this.formatUrlWithParams(`/${currentPage.route}`, currentPage
					.options));

				if (tabPage) {
					this.pageStatus = 'noLogin';
				} else if (isReLaunch) {
					this.reLaunch('/pages/common/Login', {
						redirectPath
					});
				} else {
					this.navigateTo('/pages/common/Login', {
						redirectPath
					});
				}
				uni.stopPullDownRefresh();
				// throw new LoginException();
			}
		},
		// 检查已登录页面
		checkHasLoginInTabPage() {
			this.checkHasLogin(false, true);
		},
		// 发起支付
		// requestPayment(data) {
		// 	let isH5 = false;
		// 	// #ifdef H5
		// 	isH5 = true;
		// 	// #endif
		// 	console.log(JSON.stringify(data));
		// 	return new Promise((resolve, reject) => {
		// 		if (isH5) {
		// 			const onBridgeReady = () => {
		// 				WeixinJSBridge.invoke(
		// 					'getBrandWCPayRequest', {
		// 						appId: data.appId, // 公众号名称，由商户传入
		// 						timeStamp: data.timeStamp, // 时间戳，自1970年以来的秒数
		// 						nonceStr: data.nonceStr, // 随机串
		// 						package: data.package,
		// 						signType: data.signType, // 微信签名方式：
		// 						paySign: data.sign, // 微信签名
		// 					},
		// 					(res) => {
		// 						if (res.err_msg === 'get_brand_wcpay_request:ok') {
		// 							resolve(res);
		// 						} else {
		// 							reject(res);
		// 						}
		// 					},
		// 				);
		// 			};
		// 			if (typeof WeixinJSBridge === 'undefined') {
		// 				if (document.addEventListener) {
		// 					document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
		// 				} else if (document.attachEvent) {
		// 					document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
		// 					document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
		// 				}
		// 			} else {
		// 				console.log('xxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
		// 				onBridgeReady();
		// 			}
		// 			return;
		// 		}

		// 		uni.requestPayment({
		// 			provider: 'wxpay',
		// 			orderInfo: data,
		// 			...data,
		// 			success: (res) => {
		// 				resolve(res);
		// 			},
		// 			fail: (err) => {
		// 				if (err && err.errMsg && err.errMsg.indexOf('-2') !== -1) {
		// 					/* eslint-disable prefer-promise-reject-errors */
		// 					reject('cancel');
		// 				} else {
		// 					reject(err.errMsg);
		// 				}
		// 			},
		// 		});
		// 	});
		// },
		// 加载弹框
		showLoading(title = '加载中', mask = true) {
			uni.showLoading({
				mask,
				title
			});
		},

		showLoadingInPage() {
			this.pageStatus = 'loading';
		},

		hideLoading() {
			this.pageStatus = '';
			uni.hideLoading();
		},
		// 提示框
		showAlert(content, title = '提示') {
			return new Promise((resolve, reject) => {
				uni.showModal({
					title,
					content,
					success: (res) => {
						if (res.confirm) {
							resolve();
						} else if (res.cancel) {
							reject();
						}
					},
				});
			});
		},

		retry(action) {
			if (action && action instanceof Function) {
				action();
			} else if (this.fetch) {
				this.fetch();
			}
		},

		setPageNetworkError(action) {
			this.hideLoading();
			this.pageStatus = 'network';
		},
		// 预览图片
		previewImage(image, urls) {
			uni.previewImage({
				current: image,
				urls: urls || [image],
			});
		},

		handleShareOption() {

		},

		// 增加角标
		updateCartTabBarBadge(count) {
			if (count > 0) {
				uni.setTabBarBadge({
					index: 3,
					text: `${count}`,
				});
			} else {
				uni.removeTabBarBadge({
					index: 3
				});
			}
		},
		
		// 动态设置当前页面的标题
		setPageTitle(title) {
			uni.setNavigationBarTitle({
				title
			});
		},

		// openGoodsDetail(goods) {
		// 	const id = goods.id || goods.goodsId;
		// 	if (!id) return;
		// 	this.navigateTo('/pages/goods/GoodsDetail', {
		// 		id,
		// 	});
		// },
		
		// 设置系统剪贴板的内容
		copyText(text) {
			uni.setClipboardData({
				data: text,
				success: () => {
					this.showToast('复制成功', false);
				},
			});
		},

		// processShareOption(params = {}) {
		// 	const user = this.getCurrentUser();
		// 	if (user) {
		// 		params.recommendCode = this.getCurrentUser().myNum;
		// 	}
		// 	console.log(params);
		// 	return params;
		// },
		
		// 分享
		appShare({
			path,
			params,
			title,
			imageUrl,
			type
		}) {
			// #ifdef APP-PLUS
			// if (type !== 'timeline') {
			//   this.appShareXCX({ path, params, title, imageUrl });
			//   return;
			// }

			const sharePath = this.formatUrlWithParams(path, this.processShareOption(params || {}));
			uni.share({
				provider: 'weixin',
				scene: type === 'timeline' ? 'WXSenceTimeline' : 'WXSceneSession',
				type: 0,
				href: `${config.H5_PATH}/#${sharePath}`,
				title,
				summary: '',
				imageUrl: imageUrl ? `${imageUrl}?imageView2/1/w/80/h/80` :
					'https://img.uxiangg.com/logo.png?imageView2/1/w/128',
				success: (res) => {
					console.log(`success:${JSON.stringify(res)}`);
				},
				fail: (err) => {
					console.log(`fail:${JSON.stringify(err)}`);
				},
			});
			// #endif
		},

		appShareXCX({
			path,
			params,
			title,
			imageUrl
		}) {
			// #ifdef APP-PLUS
			const sharePath = this.formatUrlWithParams(path, this.processShareOption(params || {}));

			let shareImageUrl = imageUrl || 'https://img.uxiangg.com/logo.png?imageView2/1/w/128';
			if (shareImageUrl && shareImageUrl.startsWith('http')) {
				shareImageUrl += '?imageMogr2/size-limit/100K/thumbnail/500x';
			}

			console.log(shareImageUrl);

			uni.share({
				provider: 'weixin',
				type: 5,
				imageUrl: shareImageUrl,
				title,
				scene: 'WXSceneSession',
				miniProgram: {
					id: 'gh_7a6a2a995e03',
					path: sharePath,
					type: 0,
					webUrl: `${config.H5_PATH}/#/${sharePath}`,
				},
				success: ret => {
					console.log(JSON.stringify(ret));
				},
				fail: err => {
					console.log(`fail:${JSON.stringify(err)}`);
				},
			});
			// #endif
		},

		parseSceneParams(params) {
			return qs.parse(decodeURIComponent(params));
		},

		generateShareQRCodeBase64(path, params) {
			const sharePath = this.formatUrlWithParams(path, this.processShareOption(params || {}));
			const shareLink = `${config.H5_PATH}/#/${sharePath}`;

			const base64 = QR.createQrCodeImg(shareLink, {
				size: 430,
			});

			return base64;
		},
	},
};